package com.juma.cartridge.retryque.dao;

import java.util.List;
import java.util.Set;

import com.juma.cartridge.retryque.RetryTask;
import com.juma.cartridge.retryque.TaskFree;
import com.juma.cartridge.retryque.TaskLease;
import com.juma.cartridge.retryque.TaskLeaseProlong;

/**
 * 	重试队列数据层
 * @ClassName RetryQueueDao
 * @Description
 * @Author zhuangguangyou
 * @Date 2019年6月27日 下午2:14:49
 * @Version 1.0
 *
 */
public interface RetryQueueDao extends MapperDao {

	/**
	 * 查询所有任务
	 * @return
	 */
	List<RetryTask> queryAll();
	
	/**
	 * 	入队
	 * @param task
	 * @return
	 */
	int insert(RetryTask task);
	
	/**
	 * 	锁定一批任务
	 * @param leaseVal
	 * @param count
	 * @return
	 */
	int lock(TaskLease lease);
	
	/**
	 * 	任务续租
	 * @param rerent
	 * @return
	 */
	int prolongLock(TaskLeaseProlong prolong);
	
	/**
	 * 	查询锁定的任务
	 * @param lease 租约
	 * @return
	 */
	List<RetryTask> queryLocks(TaskLease lease);
	
	/**
	 * 	更新任务
	 * @param id
	 * @param bizFlag
	 * @return
	 */
	int update(RetryTask task);
	
	/**
	 * 批量更新任务信息
	 * @param tasks
	 * @return
	 */
	int updateBatch(List<RetryTask> tasks);
	
	/**
	 * 	批量释放任务
	 * @param ids 释放的任务ID清单
	 * @param leaseVal ID匹配的租约
	 */
	int release(TaskFree free);
	
	/**
	 * 	批量删除任务
	 * @param ids
	 */
	int delete(TaskFree free);
	
	/**
	 * 获取队列中最大的轮询值
	 * @return
	 */
	Long getMaxRound(String servId);
	
	/**
	 * 恢复已中断的任务
	 * @param id
	 * @return
	 */
	int recover(Set<Long> ids);
	
	/**
	 * 中断任务
	 * @param ids
	 * @return
	 */
	int broken(Set<Long> ids);

	/**
	 * 清除任务(只能清除已中断的任务)
	 * @param ids
	 * @return
	 */
	int clear(Set<Long> ids);
	
	/**
	 * 获取指定ID批量查询任务对象
	 * @param ids
	 * @return
	 */
	List<RetryTask> getTaskByIds(Set<Long> ids);
}
